home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / xfs_dinode.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  21KB  |  481 lines

  1. /*
  2.  * Copyright (c) 2000, 2002 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2 of the GNU General Public License as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write the Free Software Foundation, Inc., 59
  21.  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
  22.  *
  23.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  24.  * Mountain View, CA  94043, or:
  25.  *
  26.  * http://www.sgi.com
  27.  *
  28.  * For further information regarding this notice, see:
  29.  *
  30.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  31.  */
  32. #ifndef __XFS_DINODE_H__
  33. #define    __XFS_DINODE_H__
  34.  
  35. struct xfs_buf;
  36. struct xfs_mount;
  37.  
  38. #define    XFS_DINODE_VERSION_1    1
  39. #define    XFS_DINODE_VERSION_2    2
  40. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DINODE_GOOD_VERSION)
  41. int xfs_dinode_good_version(int v);
  42. #define XFS_DINODE_GOOD_VERSION(v)    xfs_dinode_good_version(v)
  43. #else
  44. #define XFS_DINODE_GOOD_VERSION(v)    (((v) == XFS_DINODE_VERSION_1) || \
  45.                      ((v) == XFS_DINODE_VERSION_2))
  46. #endif
  47. #define    XFS_DINODE_MAGIC    0x494e    /* 'IN' */
  48.  
  49. /*
  50.  * Disk inode structure.
  51.  * This is just the header; the inode is expanded to fill a variable size
  52.  * with the last field expanding.  It is split into the core and "other"
  53.  * because we only need the core part in the in-core inode.
  54.  */
  55. typedef struct xfs_timestamp {
  56.     __int32_t    t_sec;        /* timestamp seconds */
  57.     __int32_t    t_nsec;        /* timestamp nanoseconds */
  58. } xfs_timestamp_t;
  59.  
  60. /*
  61.  * Note: Coordinate changes to this structure with the XFS_DI_* #defines
  62.  * below and the offsets table in xfs_ialloc_log_di().
  63.  */
  64. typedef struct xfs_dinode_core
  65. {
  66.     __uint16_t    di_magic;    /* inode magic # = XFS_DINODE_MAGIC */
  67.     __uint16_t    di_mode;    /* mode and type of file */
  68.     __int8_t    di_version;    /* inode version */
  69.     __int8_t    di_format;    /* format of di_c data */
  70.     __uint16_t    di_onlink;    /* old number of links to file */
  71.     __uint32_t    di_uid;        /* owner's user id */
  72.     __uint32_t    di_gid;        /* owner's group id */
  73.     __uint32_t    di_nlink;    /* number of links to file */
  74.     __uint16_t    di_projid;    /* owner's project id */
  75.     __uint8_t    di_pad[8];    /* unused, zeroed space */
  76.     __uint16_t    di_flushiter;    /* incremented on flush */
  77.     xfs_timestamp_t    di_atime;    /* time last accessed */
  78.     xfs_timestamp_t    di_mtime;    /* time last modified */
  79.     xfs_timestamp_t    di_ctime;    /* time created/inode modified */
  80.     xfs_fsize_t    di_size;    /* number of bytes in file */
  81.     xfs_drfsbno_t    di_nblocks;    /* # of direct & btree blocks used */
  82.     xfs_extlen_t    di_extsize;    /* basic/minimum extent size for file */
  83.     xfs_extnum_t    di_nextents;    /* number of extents in data fork */
  84.     xfs_aextnum_t    di_anextents;    /* number of extents in attribute fork*/
  85.     __uint8_t    di_forkoff;    /* attr fork offs, <<3 for 64b align */
  86.     __int8_t    di_aformat;    /* format of attr fork's data */
  87.     __uint32_t    di_dmevmask;    /* DMIG event mask */
  88.     __uint16_t    di_dmstate;    /* DMIG state info */
  89.     __uint16_t    di_flags;    /* random flags, XFS_DIFLAG_... */
  90.     __uint32_t    di_gen;        /* generation number */
  91. } xfs_dinode_core_t;
  92.  
  93. #define DI_MAX_FLUSH 0xffff
  94.  
  95. typedef struct xfs_dinode
  96. {
  97.     xfs_dinode_core_t    di_core;
  98.     /*
  99.      * In adding anything between the core and the union, be
  100.      * sure to update the macros like XFS_LITINO below and
  101.      * XFS_BMAP_RBLOCK_DSIZE in xfs_bmap_btree.h.
  102.      */
  103.     xfs_agino_t        di_next_unlinked;/* agi unlinked list ptr */
  104.     union {
  105.         xfs_bmdr_block_t di_bmbt;    /* btree root block */
  106.         xfs_bmbt_rec_32_t di_bmx[1];    /* extent list */
  107.         xfs_dir_shortform_t di_dirsf;    /* shortform directory */
  108.         xfs_dir2_sf_t    di_dir2sf;    /* shortform directory v2 */
  109.         char        di_c[1];    /* local contents */
  110.         xfs_dev_t    di_dev;        /* device for S_IFCHR/S_IFBLK */
  111.         uuid_t        di_muuid;    /* mount point value */
  112.         char        di_symlink[1];    /* local symbolic link */
  113.     }        di_u;
  114.     union {
  115.         xfs_bmdr_block_t di_abmbt;    /* btree root block */
  116.         xfs_bmbt_rec_32_t di_abmx[1];    /* extent list */
  117.         xfs_attr_shortform_t di_attrsf;    /* shortform attribute list */
  118.     }        di_a;
  119. } xfs_dinode_t;
  120.  
  121. /*
  122.  * The 32 bit link count in the inode theoretically maxes out at UINT_MAX.
  123.  * Since the pathconf interface is signed, we use 2^31 - 1 instead.
  124.  * The old inode format had a 16 bit link count, so its maximum is USHRT_MAX.
  125.  */
  126. #define    XFS_MAXLINK        ((1U << 31) - 1U)
  127. #define    XFS_MAXLINK_1        65535U
  128.  
  129. /*
  130.  * Bit names for logging disk inodes only
  131.  */
  132. #define    XFS_DI_MAGIC        0x0000001
  133. #define    XFS_DI_MODE        0x0000002
  134. #define    XFS_DI_VERSION        0x0000004
  135. #define    XFS_DI_FORMAT        0x0000008
  136. #define    XFS_DI_ONLINK        0x0000010
  137. #define    XFS_DI_UID        0x0000020
  138. #define    XFS_DI_GID        0x0000040
  139. #define    XFS_DI_NLINK        0x0000080
  140. #define    XFS_DI_PROJID        0x0000100
  141. #define    XFS_DI_PAD        0x0000200
  142. #define    XFS_DI_ATIME        0x0000400
  143. #define    XFS_DI_MTIME        0x0000800
  144. #define    XFS_DI_CTIME        0x0001000
  145. #define    XFS_DI_SIZE        0x0002000
  146. #define    XFS_DI_NBLOCKS        0x0004000
  147. #define    XFS_DI_EXTSIZE        0x0008000
  148. #define    XFS_DI_NEXTENTS        0x0010000
  149. #define    XFS_DI_NAEXTENTS    0x0020000
  150. #define    XFS_DI_FORKOFF        0x0040000
  151. #define    XFS_DI_AFORMAT        0x0080000
  152. #define    XFS_DI_DMEVMASK        0x0100000
  153. #define    XFS_DI_DMSTATE        0x0200000
  154. #define    XFS_DI_FLAGS        0x0400000
  155. #define    XFS_DI_GEN        0x0800000
  156. #define    XFS_DI_NEXT_UNLINKED    0x1000000
  157. #define    XFS_DI_U        0x2000000
  158. #define    XFS_DI_A        0x4000000
  159. #define    XFS_DI_NUM_BITS        27
  160. #define    XFS_DI_ALL_BITS        ((1 << XFS_DI_NUM_BITS) - 1)
  161. #define    XFS_DI_CORE_BITS    (XFS_DI_ALL_BITS & ~(XFS_DI_U|XFS_DI_A))
  162.  
  163. /*
  164.  * Values for di_format
  165.  */
  166. typedef enum xfs_dinode_fmt
  167. {
  168.     XFS_DINODE_FMT_DEV,        /* CHR, BLK: di_dev */
  169.     XFS_DINODE_FMT_LOCAL,        /* DIR, REG: di_c */
  170.                     /* LNK: di_symlink */
  171.     XFS_DINODE_FMT_EXTENTS,        /* DIR, REG, LNK: di_bmx */
  172.     XFS_DINODE_FMT_BTREE,        /* DIR, REG, LNK: di_bmbt */
  173.     XFS_DINODE_FMT_UUID        /* MNT: di_uuid */
  174. } xfs_dinode_fmt_t;
  175.  
  176. /*
  177.  * Inode minimum and maximum sizes.
  178.  */
  179. #define    XFS_DINODE_MIN_LOG    8
  180. #define    XFS_DINODE_MAX_LOG    11
  181. #define    XFS_DINODE_MIN_SIZE    (1 << XFS_DINODE_MIN_LOG)
  182. #define    XFS_DINODE_MAX_SIZE    (1 << XFS_DINODE_MAX_LOG)
  183.  
  184. /*
  185.  * Inode size for given fs.
  186.  */
  187. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_LITINO)
  188. int xfs_litino(struct xfs_mount *mp);
  189. #define    XFS_LITINO(mp)        xfs_litino(mp)
  190. #else
  191. #define    XFS_LITINO(mp)    ((mp)->m_litino)
  192. #endif
  193. #define    XFS_BROOT_SIZE_ADJ    \
  194.     (sizeof(xfs_bmbt_block_t) - sizeof(xfs_bmdr_block_t))
  195.  
  196. /*
  197.  * Fork identifiers.  Here so utilities can use them without including
  198.  * xfs_inode.h.
  199.  */
  200. #define    XFS_DATA_FORK    0
  201. #define    XFS_ATTR_FORK    1
  202.  
  203. /*
  204.  * Inode data & attribute fork sizes, per inode.
  205.  */
  206. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_Q)
  207. int xfs_cfork_q_arch(xfs_dinode_core_t *dcp, xfs_arch_t arch);
  208. int xfs_cfork_q(xfs_dinode_core_t *dcp);
  209. #define    XFS_CFORK_Q_ARCH(dcp,arch)          xfs_cfork_q_arch(dcp,arch)
  210. #define    XFS_CFORK_Q(dcp)                    xfs_cfork_q(dcp)
  211. #else
  212. #define    XFS_CFORK_Q_ARCH(dcp,arch)        (!INT_ISZERO((dcp)->di_forkoff, arch))
  213. #define XFS_CFORK_Q(dcp)                    ((dcp)->di_forkoff != 0)
  214.  
  215. #endif
  216. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_BOFF)
  217. int xfs_cfork_boff_arch(xfs_dinode_core_t *dcp, xfs_arch_t arch);
  218. int xfs_cfork_boff(xfs_dinode_core_t *dcp);
  219. #define    XFS_CFORK_BOFF_ARCH(dcp,arch)        xfs_cfork_boff_arch(dcp,arch)
  220. #define    XFS_CFORK_BOFF(dcp)                xfs_cfork_boff(dcp)
  221. #else
  222. #define    XFS_CFORK_BOFF_ARCH(dcp,arch)        ((int)(INT_GET((dcp)->di_forkoff, arch) << 3))
  223. #define XFS_CFORK_BOFF(dcp)                 ((int)((dcp)->di_forkoff << 3))
  224.  
  225. #endif
  226. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_DSIZE)
  227. int xfs_cfork_dsize_arch(xfs_dinode_core_t *dcp, struct xfs_mount *mp, xfs_arch_t arch);
  228. int xfs_cfork_dsize(xfs_dinode_core_t *dcp, struct xfs_mount *mp);
  229. #define    XFS_CFORK_DSIZE_ARCH(dcp,mp,arch)   xfs_cfork_dsize_arch(dcp,mp,arch)
  230. #define    XFS_CFORK_DSIZE(dcp,mp)             xfs_cfork_dsize(dcp,mp)
  231. #else
  232. #define    XFS_CFORK_DSIZE_ARCH(dcp,mp,arch) \
  233.     (XFS_CFORK_Q_ARCH(dcp, arch) ? XFS_CFORK_BOFF_ARCH(dcp, arch) : XFS_LITINO(mp))
  234. #define XFS_CFORK_DSIZE(dcp,mp) \
  235.     (XFS_CFORK_Q(dcp) ? XFS_CFORK_BOFF(dcp) : XFS_LITINO(mp))
  236.  
  237. #endif
  238. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_ASIZE)
  239. int xfs_cfork_asize_arch(xfs_dinode_core_t *dcp, struct xfs_mount *mp, xfs_arch_t arch);
  240. int xfs_cfork_asize(xfs_dinode_core_t *dcp, struct xfs_mount *mp);
  241. #define    XFS_CFORK_ASIZE_ARCH(dcp,mp,arch)   xfs_cfork_asize_arch(dcp,mp,arch)
  242. #define    XFS_CFORK_ASIZE(dcp,mp)             xfs_cfork_asize(dcp,mp)
  243. #else
  244. #define    XFS_CFORK_ASIZE_ARCH(dcp,mp,arch) \
  245.     (XFS_CFORK_Q_ARCH(dcp, arch) ? XFS_LITINO(mp) - XFS_CFORK_BOFF_ARCH(dcp, arch) : 0)
  246. #define XFS_CFORK_ASIZE(dcp,mp) \
  247.     (XFS_CFORK_Q(dcp) ? XFS_LITINO(mp) - XFS_CFORK_BOFF(dcp) : 0)
  248.  
  249. #endif
  250. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_SIZE)
  251. int xfs_cfork_size_arch(xfs_dinode_core_t *dcp, struct xfs_mount *mp, int w, xfs_arch_t arch);
  252. int xfs_cfork_size(xfs_dinode_core_t *dcp, struct xfs_mount *mp, int w);
  253. #define    XFS_CFORK_SIZE_ARCH(dcp,mp,w,arch)  xfs_cfork_size_arch(dcp,mp,w,arch)
  254. #define    XFS_CFORK_SIZE(dcp,mp,w)            xfs_cfork_size(dcp,mp,w)
  255. #else
  256. #define    XFS_CFORK_SIZE_ARCH(dcp,mp,w,arch) \
  257.     ((w) == XFS_DATA_FORK ? \
  258.         XFS_CFORK_DSIZE_ARCH(dcp, mp, arch) : XFS_CFORK_ASIZE_ARCH(dcp, mp, arch))
  259. #define XFS_CFORK_SIZE(dcp,mp,w) \
  260.     ((w) == XFS_DATA_FORK ? \
  261.         XFS_CFORK_DSIZE(dcp, mp) : XFS_CFORK_ASIZE(dcp, mp))
  262.  
  263. #endif
  264.  
  265. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_DSIZE)
  266. int xfs_dfork_dsize_arch(xfs_dinode_t *dip, struct xfs_mount *mp, xfs_arch_t arch);
  267. int xfs_dfork_dsize(xfs_dinode_t *dip, struct xfs_mount *mp);
  268. #define    XFS_DFORK_DSIZE_ARCH(dip,mp,arch)   xfs_dfork_dsize_arch(dip,mp,arch)
  269. #define    XFS_DFORK_DSIZE(dip,mp)             xfs_dfork_dsize(dip,mp)
  270. #else
  271. #define    XFS_DFORK_DSIZE_ARCH(dip,mp,arch)   XFS_CFORK_DSIZE_ARCH(&(dip)->di_core, mp, arch)
  272. #define XFS_DFORK_DSIZE(dip,mp)             XFS_DFORK_DSIZE_ARCH(dip,mp,ARCH_NOCONVERT)
  273.  
  274. #endif
  275. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_ASIZE)
  276. int xfs_dfork_asize_arch(xfs_dinode_t *dip, struct xfs_mount *mp, xfs_arch_t arch);
  277. int xfs_dfork_asize(xfs_dinode_t *dip, struct xfs_mount *mp);
  278. #define    XFS_DFORK_ASIZE_ARCH(dip,mp,arch)   xfs_dfork_asize_arch(dip,mp,arch)
  279. #define    XFS_DFORK_ASIZE(dip,mp)             xfs_dfork_asize(dip,mp)
  280. #else
  281. #define    XFS_DFORK_ASIZE_ARCH(dip,mp,arch)   XFS_CFORK_ASIZE_ARCH(&(dip)->di_core, mp, arch)
  282. #define XFS_DFORK_ASIZE(dip,mp)             XFS_DFORK_ASIZE_ARCH(dip,mp,ARCH_NOCONVERT)
  283.  
  284. #endif
  285. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_SIZE)
  286. int xfs_dfork_size_arch(xfs_dinode_t *dip, struct xfs_mount *mp, int w, xfs_arch_t arch);
  287. int xfs_dfork_size(xfs_dinode_t *dip, struct xfs_mount *mp, int w);
  288. #define    XFS_DFORK_SIZE_ARCH(dip,mp,w,arch)  xfs_dfork_size_arch(dip,mp,w,arch)
  289. #define    XFS_DFORK_SIZE(dip,mp,w)            xfs_dfork_size(dip,mp,w)
  290. #else
  291. #define    XFS_DFORK_SIZE_ARCH(dip,mp,w,arch)  XFS_CFORK_SIZE_ARCH(&(dip)->di_core, mp, w, arch)
  292. #define XFS_DFORK_SIZE(dip,mp,w)            XFS_DFORK_SIZE_ARCH(dip,mp,w,ARCH_NOCONVERT)
  293.  
  294. #endif
  295.  
  296. /*
  297.  * Macros for accessing per-fork disk inode information.
  298.  */
  299. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_Q)
  300. int xfs_dfork_q_arch(xfs_dinode_t *dip, xfs_arch_t arch);
  301. int xfs_dfork_q(xfs_dinode_t *dip);
  302. #define    XFS_DFORK_Q_ARCH(dip,arch)        xfs_dfork_q_arch(dip,arch)
  303. #define    XFS_DFORK_Q(dip)                xfs_dfork_q(dip)
  304. #else
  305. #define    XFS_DFORK_Q_ARCH(dip,arch)        XFS_CFORK_Q_ARCH(&(dip)->di_core, arch)
  306. #define XFS_DFORK_Q(dip)                    XFS_DFORK_Q_ARCH(dip,ARCH_NOCONVERT)
  307.  
  308. #endif
  309. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_BOFF)
  310. int xfs_dfork_boff_arch(xfs_dinode_t *dip, xfs_arch_t arch);
  311. int xfs_dfork_boff(xfs_dinode_t *dip);
  312. #define    XFS_DFORK_BOFF_ARCH(dip,arch)        xfs_dfork_boff_arch(dip,arch)
  313. #define    XFS_DFORK_BOFF(dip)                xfs_dfork_boff(dip)
  314. #else
  315. #define    XFS_DFORK_BOFF_ARCH(dip,arch)        XFS_CFORK_BOFF_ARCH(&(dip)->di_core, arch)
  316. #define XFS_DFORK_BOFF(dip)                 XFS_DFORK_BOFF_ARCH(dip,ARCH_NOCONVERT)
  317.  
  318. #endif
  319. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_DPTR)
  320. char *xfs_dfork_dptr_arch(xfs_dinode_t *dip, xfs_arch_t arch);
  321. char *xfs_dfork_dptr(xfs_dinode_t *dip);
  322. #define    XFS_DFORK_DPTR_ARCH(dip,arch)        xfs_dfork_dptr_arch(dip,arch)
  323. #define    XFS_DFORK_DPTR(dip)                xfs_dfork_dptr(dip)
  324. #else
  325. #define    XFS_DFORK_DPTR_ARCH(dip,arch)        ((dip)->di_u.di_c)
  326. #define XFS_DFORK_DPTR(dip)                 XFS_DFORK_DPTR_ARCH(dip,ARCH_NOCONVERT)
  327.  
  328. #endif
  329. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_APTR)
  330. char *xfs_dfork_aptr_arch(xfs_dinode_t *dip, xfs_arch_t arch);
  331. char *xfs_dfork_aptr(xfs_dinode_t *dip);
  332. #define    XFS_DFORK_APTR_ARCH(dip,arch)       xfs_dfork_aptr_arch(dip,arch)
  333. #define    XFS_DFORK_APTR(dip)                 xfs_dfork_aptr(dip)
  334. #else
  335. #define    XFS_DFORK_APTR_ARCH(dip,arch)        ((dip)->di_u.di_c + XFS_DFORK_BOFF_ARCH(dip, arch))
  336. #define XFS_DFORK_APTR(dip)                 XFS_DFORK_APTR_ARCH(dip,ARCH_NOCONVERT)
  337.  
  338. #endif
  339. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_PTR)
  340. char *xfs_dfork_ptr_arch(xfs_dinode_t *dip, int w, xfs_arch_t arch);
  341. char *xfs_dfork_ptr(xfs_dinode_t *dip, int w);
  342. #define    XFS_DFORK_PTR_ARCH(dip,w,arch)      xfs_dfork_ptr_arch(dip,w,arch)
  343. #define    XFS_DFORK_PTR(dip,w)                xfs_dfork_ptr(dip,w)
  344. #else
  345. #define    XFS_DFORK_PTR_ARCH(dip,w,arch)    \
  346.     ((w) == XFS_DATA_FORK ? XFS_DFORK_DPTR_ARCH(dip, arch) : XFS_DFORK_APTR_ARCH(dip, arch))
  347. #define XFS_DFORK_PTR(dip,w)                XFS_DFORK_PTR_ARCH(dip,w,ARCH_NOCONVERT)
  348.  
  349. #endif
  350. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_FORMAT)
  351. int xfs_cfork_format_arch(xfs_dinode_core_t *dcp, int w, xfs_arch_t arch);
  352. int xfs_cfork_format(xfs_dinode_core_t *dcp, int w);
  353. #define    XFS_CFORK_FORMAT_ARCH(dcp,w,arch)   xfs_cfork_format_arch(dcp,w,arch)
  354. #define    XFS_CFORK_FORMAT(dcp,w)             xfs_cfork_format(dcp,w)
  355. #else
  356. #define    XFS_CFORK_FORMAT_ARCH(dcp,w,arch) \
  357.     ((w) == XFS_DATA_FORK ? INT_GET((dcp)->di_format, arch) : INT_GET((dcp)->di_aformat, arch))
  358. #define XFS_CFORK_FORMAT(dcp,w)             XFS_CFORK_FORMAT_ARCH(dcp,w,ARCH_NOCONVERT)
  359.  
  360. #endif
  361. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_FMT_SET)
  362. void xfs_cfork_fmt_set_arch(xfs_dinode_core_t *dcp, int w, int n, xfs_arch_t arch);
  363. void xfs_cfork_fmt_set(xfs_dinode_core_t *dcp, int w, int n);
  364. #define    XFS_CFORK_FMT_SET_ARCH(dcp,w,n,arch) xfs_cfork_fmt_set_arch(dcp,w,n,arch)
  365. #define    XFS_CFORK_FMT_SET(dcp,w,n)           xfs_cfork_fmt_set(dcp,w,n)
  366. #else
  367. #define    XFS_CFORK_FMT_SET_ARCH(dcp,w,n,arch) \
  368.     ((w) == XFS_DATA_FORK ? \
  369.         (INT_SET((dcp)->di_format, arch, (n))) : \
  370.         (INT_SET((dcp)->di_aformat, arch, (n))))
  371. #define XFS_CFORK_FMT_SET(dcp,w,n)           XFS_CFORK_FMT_SET_ARCH(dcp,w,n,ARCH_NOCONVERT)
  372.  
  373. #endif
  374. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_NEXTENTS)
  375. int xfs_cfork_nextents_arch(xfs_dinode_core_t *dcp, int w, xfs_arch_t arch);
  376. int xfs_cfork_nextents(xfs_dinode_core_t *dcp, int w);
  377. #define    XFS_CFORK_NEXTENTS_ARCH(dcp,w,arch)  xfs_cfork_nextents_arch(dcp,w,arch)
  378. #define    XFS_CFORK_NEXTENTS(dcp,w)            xfs_cfork_nextents(dcp,w)
  379. #else
  380. #define    XFS_CFORK_NEXTENTS_ARCH(dcp,w,arch) \
  381.     ((w) == XFS_DATA_FORK ? INT_GET((dcp)->di_nextents, arch) : INT_GET((dcp)->di_anextents, arch))
  382. #define XFS_CFORK_NEXTENTS(dcp,w)            XFS_CFORK_NEXTENTS_ARCH(dcp,w,ARCH_NOCONVERT)
  383.  
  384. #endif
  385. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_CFORK_NEXT_SET)
  386. void xfs_cfork_next_set_arch(xfs_dinode_core_t *dcp, int w, int n, xfs_arch_t arch);
  387. void xfs_cfork_next_set(xfs_dinode_core_t *dcp, int w, int n);
  388. #define    XFS_CFORK_NEXT_SET_ARCH(dcp,w,n,arch)    xfs_cfork_next_set_arch(dcp,w,n,arch)
  389. #define    XFS_CFORK_NEXT_SET(dcp,w,n)            xfs_cfork_next_set(dcp,w,n)
  390. #else
  391. #define    XFS_CFORK_NEXT_SET_ARCH(dcp,w,n,arch) \
  392.     ((w) == XFS_DATA_FORK ? \
  393.         (INT_SET((dcp)->di_nextents, arch, (n))) : \
  394.         (INT_SET((dcp)->di_anextents, arch, (n))))
  395. #define XFS_CFORK_NEXT_SET(dcp,w,n)             XFS_CFORK_NEXT_SET_ARCH(dcp,w,n,ARCH_NOCONVERT)
  396.  
  397. #endif
  398. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_FORMAT)
  399. int xfs_dfork_format_arch(xfs_dinode_t *dip, int w, xfs_arch_t arch);
  400. int xfs_dfork_format(xfs_dinode_t *dip, int w);
  401. #define    XFS_DFORK_FORMAT_ARCH(dip,w,arch)   xfs_dfork_format_arch(dip,w,arch)
  402. #define    XFS_DFORK_FORMAT(dip,w)             xfs_dfork_format(dip,w)
  403. #else
  404. #define    XFS_DFORK_FORMAT_ARCH(dip,w,arch)   XFS_CFORK_FORMAT_ARCH(&(dip)->di_core, w, arch)
  405. #define XFS_DFORK_FORMAT(dip,w)             XFS_DFORK_FORMAT_ARCH(dip,w,ARCH_NOCONVERT)
  406.  
  407. #endif
  408. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_FMT_SET)
  409. void xfs_dfork_fmt_set_arch(xfs_dinode_t *dip, int w, int n, xfs_arch_t arch);
  410. void xfs_dfork_fmt_set(xfs_dinode_t *dip, int w, int n);
  411. #define    XFS_DFORK_FMT_SET_ARCH(dip,w,n,arch)    xfs_dfork_fmt_set_arch(dip,w,n,arch)
  412. #define    XFS_DFORK_FMT_SET(dip,w,n)              xfs_dfork_fmt_set(dip,w,n)
  413. #else
  414. #define    XFS_DFORK_FMT_SET_ARCH(dip,w,n,arch)    XFS_CFORK_FMT_SET_ARCH(&(dip)->di_core, w, n, arch)
  415. #define XFS_DFORK_FMT_SET(dip,w,n)              XFS_DFORK_FMT_SET_ARCH(dip,w,n,ARCH_NOCONVERT)
  416.  
  417. #endif
  418. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_NEXTENTS)
  419. int xfs_dfork_nextents_arch(xfs_dinode_t *dip, int w, xfs_arch_t arch);
  420. int xfs_dfork_nextents(xfs_dinode_t *dip, int w);
  421. #define    XFS_DFORK_NEXTENTS_ARCH(dip,w,arch) xfs_dfork_nextents_arch(dip,w,arch)
  422. #define    XFS_DFORK_NEXTENTS(dip,w)           xfs_dfork_nextents(dip,w)
  423. #else
  424. #define    XFS_DFORK_NEXTENTS_ARCH(dip,w,arch) XFS_CFORK_NEXTENTS_ARCH(&(dip)->di_core, w, arch)
  425. #define XFS_DFORK_NEXTENTS(dip,w)           XFS_DFORK_NEXTENTS_ARCH(dip,w,ARCH_NOCONVERT)
  426.  
  427. #endif
  428. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DFORK_NEXT_SET)
  429. void xfs_dfork_next_set_arch(xfs_dinode_t *dip, int w, int n, xfs_arch_t arch);
  430. void xfs_dfork_next_set(xfs_dinode_t *dip, int w, int n);
  431. #define    XFS_DFORK_NEXT_SET_ARCH(dip,w,n,arch)   xfs_dfork_next_set_arch(dip,w,n,arch)
  432. #define    XFS_DFORK_NEXT_SET(dip,w,n)             xfs_dfork_next_set(dip,w,n)
  433. #else
  434. #define    XFS_DFORK_NEXT_SET_ARCH(dip,w,n,arch)    XFS_CFORK_NEXT_SET_ARCH(&(dip)->di_core, w, n, arch)
  435. #define XFS_DFORK_NEXT_SET(dip,w,n)             XFS_DFORK_NEXT_SET_ARCH(dip,w,n,ARCH_NOCONVERT)
  436.  
  437. #endif
  438.  
  439. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_BUF_TO_DINODE)
  440. xfs_dinode_t *xfs_buf_to_dinode(struct xfs_buf *bp);
  441. #define    XFS_BUF_TO_DINODE(bp)    xfs_buf_to_dinode(bp)
  442. #else
  443. #define    XFS_BUF_TO_DINODE(bp)    ((xfs_dinode_t *)(XFS_BUF_PTR(bp)))
  444. #endif
  445.  
  446. /*
  447.  * Values for di_flags
  448.  * There should be a one-to-one correspondence between these flags and the
  449.  * XFS_XFLAG_s.
  450.  */
  451. #define XFS_DIFLAG_REALTIME_BIT  0    /* file's blocks come from rt area */
  452. #define XFS_DIFLAG_PREALLOC_BIT  1    /* file space has been preallocated */
  453. #define XFS_DIFLAG_NEWRTBM_BIT   2    /* for rtbitmap inode, new format */
  454. #define XFS_DIFLAG_IMMUTABLE_BIT 3    /* inode is immutable */
  455. #define XFS_DIFLAG_APPEND_BIT    4    /* inode is append-only */
  456. #define XFS_DIFLAG_SYNC_BIT      5    /* inode is written synchronously */
  457. #define XFS_DIFLAG_NOATIME_BIT   6    /* do not update atime */
  458. #define XFS_DIFLAG_NODUMP_BIT    7    /* do not dump */
  459. #define XFS_DIFLAG_RTINHERIT_BIT 8    /* create with realtime bit set */
  460. #define XFS_DIFLAG_PROJINHERIT_BIT  9    /* create with parents projid */
  461. #define XFS_DIFLAG_NOSYMLINKS_BIT  10    /* disallow symlink creation */
  462. #define XFS_DIFLAG_REALTIME      (1 << XFS_DIFLAG_REALTIME_BIT)
  463. #define XFS_DIFLAG_PREALLOC      (1 << XFS_DIFLAG_PREALLOC_BIT)
  464. #define XFS_DIFLAG_NEWRTBM       (1 << XFS_DIFLAG_NEWRTBM_BIT)
  465. #define XFS_DIFLAG_IMMUTABLE     (1 << XFS_DIFLAG_IMMUTABLE_BIT)
  466. #define XFS_DIFLAG_APPEND        (1 << XFS_DIFLAG_APPEND_BIT)
  467. #define XFS_DIFLAG_SYNC          (1 << XFS_DIFLAG_SYNC_BIT)
  468. #define XFS_DIFLAG_NOATIME       (1 << XFS_DIFLAG_NOATIME_BIT)
  469. #define XFS_DIFLAG_NODUMP        (1 << XFS_DIFLAG_NODUMP_BIT)
  470. #define XFS_DIFLAG_RTINHERIT     (1 << XFS_DIFLAG_RTINHERIT_BIT)
  471. #define XFS_DIFLAG_PROJINHERIT   (1 << XFS_DIFLAG_PROJINHERIT_BIT)
  472. #define XFS_DIFLAG_NOSYMLINKS    (1 << XFS_DIFLAG_NOSYMLINKS_BIT)
  473.  
  474. #define XFS_DIFLAG_ANY \
  475.     (XFS_DIFLAG_REALTIME | XFS_DIFLAG_PREALLOC | XFS_DIFLAG_NEWRTBM | \
  476.      XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_APPEND | XFS_DIFLAG_SYNC | \
  477.      XFS_DIFLAG_NOATIME | XFS_DIFLAG_NODUMP | XFS_DIFLAG_RTINHERIT | \
  478.      XFS_DIFLAG_PROJINHERIT | XFS_DIFLAG_NOSYMLINKS)
  479.  
  480. #endif    /* __XFS_DINODE_H__ */
  481.